import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
from datetime import datetime
import numpy as np

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False   # 用来正常显示负号

# 读取Excel文件
file_path = '2020年销售数据.xlsx'

# 读取数据
df = pd.read_excel(file_path, sheet_name='data')

# 确保销售日期是datetime类型
df['销售日期'] = pd.to_datetime(df['销售日期'])

# 提取月份信息
df['月份'] = df['销售日期'].dt.to_period('M')

# 筛选京东和拼多多的数据
jd_data = df[df['销售渠道'] == '京东']
pdd_data = df[df['销售渠道'] == '拼多多']

# 按月份和渠道分组汇总销售数量
jd_monthly = jd_data.groupby('月份')['销售数量'].sum().reset_index()
pdd_monthly = pdd_data.groupby('月份')['销售数量'].sum().reset_index()

# 将月份转换为字符串格式用于显示
jd_monthly['月份_str'] = jd_monthly['月份'].astype(str)
pdd_monthly['月份_str'] = pdd_monthly['月份'].astype(str)

# 创建图表
plt.figure(figsize=(12, 7))

# 绘制京东的折线图
plt.plot(jd_monthly['月份_str'], jd_monthly['销售数量'],
         label='京东', color='#e74c3c', linewidth=3, marker='o', markersize=6, markerfacecolor='white')

# 绘制拼多多的折线图
plt.plot(pdd_monthly['月份_str'], pdd_monthly['销售数量'],
         label='拼多多', color='#3498db', linewidth=3, marker='s', markersize=6, markerfacecolor='white')

# 设置图表标题和标签
plt.title('2020年京东和拼多多月度销售数量趋势图', fontsize=16, fontweight='bold', pad=20)
plt.xlabel('月份', fontsize=12)
plt.ylabel('销售数量', fontsize=12)

# 设置图例
plt.legend(fontsize=12, loc='upper left')

# 设置网格
plt.grid(True, alpha=0.3, linestyle='--')

# 旋转x轴标签以便更好地显示
plt.xticks(rotation=45)

# 在折线上添加数值标签
for i, (month, value) in enumerate(zip(jd_monthly['月份_str'], jd_monthly['销售数量'])):
    plt.annotate(f'{value:,}', (month, value), textcoords="offset points",
                 xytext=(0,10), ha='center', fontsize=9, color='#e74c3c')

for i, (month, value) in enumerate(zip(pdd_monthly['月份_str'], pdd_monthly['销售数量'])):
    plt.annotate(f'{value:,}', (month, value), textcoords="offset points",
                 xytext=(0,10), ha='center', fontsize=9, color='#3498db')
#dpi的含义： dots per inch，每英寸的像素点数量
# 调整布局
plt.tight_layout()

# 显示图表
plt.show()

# 打印详细的统计信息
print("=" * 50)
print("月度销售数据统计:")
print("=" * 50)

print("\n京东月度销售:")
for _, row in jd_monthly.iterrows():
    print(f"  {row['月份_str']}: {row['销售数量']:,}")

print(f"\n京东全年总销售数量: {jd_monthly['销售数量'].sum():,}")

print("\n拼多多月度销售:")
for _, row in pdd_monthly.iterrows():
    print(f"  {row['月份_str']}: {row['销售数量']:,}")

print(f"\n拼多多全年总销售数量: {pdd_monthly['销售数量'].sum():,}")

print(f"\n数据时间范围: {df['销售日期'].min().strftime('%Y-%m-%d')} 到 {df['销售日期'].max().strftime('%Y-%m-%d')}")